home *** CD-ROM | disk | FTP | other *** search
/ IRIX 6.2 / IRIX 6.2 CD2.iso / dist / outbox.idb / var / www / cgi-bin / handler.z / handler
Text File  |  1996-06-10  |  2KB  |  121 lines

  1. #!/usr/bin/perl
  2.  
  3. #__________________________________________________________
  4. #
  5. #   File:    handler
  6. #   By:      Matt Ho
  7. #   Date:    7/23/95
  8. #   Purpose: Appropriately packages documents for download
  9. #            or display.
  10. #__________________________________________________________
  11.  
  12.  
  13. #__________________________________________________________
  14. #
  15. #    Set some environment variables, we'll need through the
  16. #    script and do some initial error checking.
  17. #__________________________________________________________
  18.  
  19. $ROOT     = "/var/www/htdocs" ;    # Root directory
  20. $PATH     = $ENV{'PATH_INFO'} ;
  21.  
  22. $ls       = "/sbin/ls -a1" ;
  23.  
  24. chop $PATH if substr($PATH, -1) eq "/" ;
  25. @_        = split('/', $PATH) ;
  26. $pathRoot = $_[$#_] ;
  27. $doc      = $ROOT.$PATH ;
  28.  
  29. &ErrBadPath unless &ValidPath ; # Check for server spoofing
  30.  
  31. #__________________________________________________________
  32. #
  33. #    Read the form data in (we just may need this)
  34. #__________________________________________________________
  35.  
  36. if( $ENV{'REQUEST_METHOD'} eq "GET" )
  37. {
  38.    $buffer=$ENV{'QUERY_STRING'} ;
  39. else
  40. {
  41.    read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}) ;
  42. }
  43.  
  44. @pairs = split(/&/, $buffer) ;
  45. foreach (@pairs)
  46. {
  47.     tr/+/ / ;    
  48.    ($name,$value) =  split(/=/) ;
  49.     $value        =~ s/%(..)/pack("c",hex($1))/ge ;
  50.     $name         =~ s/%(..)/pack("c",hex($1))/ge ;
  51.  
  52.     $FORM{$name} = $value ;
  53. }
  54.  
  55.  
  56. #__________________________________________________________
  57. #
  58.  
  59. $data = $FORM{'data'} ;
  60. if( $data eq "Download" )
  61. {
  62.     unless( open(INPUT, $doc) )
  63.     {
  64.         print <<ENDOFTEXT ;
  65. Content-type: text/html
  66.  
  67. <HEAD><TITLE>404 Not Found</TITLE></HEAD>
  68. <BODY><H1>404 Not Found</H1>
  69. The requested URL $ENV{'PATH_INFO'} was not found on this server.<P>
  70. </BODY>
  71. ENDOFTEXT
  72.         return ;
  73.     } 
  74.     print <<ENDOFTEXT ;
  75. Content-type: application/octet-stream
  76.  
  77. ENDOFTEXT
  78.  
  79.     while( read(INPUT, $buf, 16384) )
  80.     {
  81.         print $buf ;
  82.     } 
  83.  
  84.     close(INPUT) ;
  85. }
  86. elsif( $data eq "View" )
  87. {
  88.     substr($PATH, 0, 1) = "/~" ;
  89.     print <<ENDOFTEXT ;
  90. Location: $PATH
  91.  
  92. ENDOFTEXT
  93. }
  94. else
  95. {
  96.     print <<ENDOFTEXT ;
  97. Content-type: text/html
  98.  
  99. <HEAD><TITLE>404 Not Found</TITLE></HEAD>
  100. <BODY><H1>404 Not Found</H1>
  101. The requested URL $PATH was not found on this server.<P>
  102. </BODY>
  103. ENDOFTEXT
  104. }
  105.  
  106. #__________________________________________________________
  107.  
  108. sub ValidPath
  109. {
  110.     return 1 unless /\.\./ ;
  111.    
  112.     return '' if /^\.\./ ;
  113.     return '' if /\/\.\.\// ;
  114.     return '' if /\.\.$/ ;
  115.  
  116.     return 1 ;
  117. }
  118.  
  119.  
  120.